<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <!-- 2.两数相加
        给你两个 `非空 `的链表，表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的，并且每个节点只能存储 一位 数字。

        请你将两个数相加，并以相同形式返回一个表示和的链表。

        你可以假设除了数字 0 之外，这两个数都不会以 0 开头。

        示例 1：

        输入：l1 = [2,4,3], l2 = [5,6,4]
        输出：[7,0,8]
        解释：342 + 465 = 807.

        示例 2：

        输入：l1 = [0], l2 = [0]
        输出：[0]

        示例 3：

        输入：l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
        输出：[8,9,9,9,0,0,0,1]
     -->
    <script>
        var addTwoNumbers = function (l1, l2) {
            // 设链表、指针、两数和进位值
            let dummy = new ListNode()
            let curr = dummy
            let carry = 0
            while (l1 || l2) {
                let x = l1 ? l1.val : 0
                let y = l2 ? l2.val : 0

                let sum = x + y + carry
                curr.next = new ListNode(sum % 10)
                curr = curr.next
                // 取整进几位
                carry = Math.floor(sum / 10)
                // 判断l1和l2的下一位是否为空
                l1 = l1 ? l1.next : null
                l2 = l2 ? l2.next : null
            }
            console.log(dummy.next)
        };
        addTwoNumbers([1, 2, 3], [3, 4, 5])
    </script>
</body>

</html>